package com.zrf.base.knowledge.leetcode.editor.cn;

import com.zrf.base.knowledge.mulip.Father;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

/**
 * //给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断字符串是否有效。
 * //
 * // 有效字符串需满足：
 * //
 * //
 * // 左括号必须用相同类型的右括号闭合。
 * // 左括号必须以正确的顺序闭合。
 * //
 * //
 * // 注意空字符串可被认为是有效字符串。
 * //
 * // 示例 1:
 * //
 * // 输入: "()"
 * //输出: true
 * //
 * //
 * // 示例 2:
 * //
 * // 输入: "()[]{}"
 * //输出: true
 * //
 * //
 * // 示例 3:
 * //
 * // 输入: "(]"
 * //输出: false
 * //
 * //
 * // 示例 4:
 * //
 * // 输入: "([)]"
 * //输出: false
 * //
 * //
 * // 示例 5:
 * //
 * // 输入: "{[]}"
 * //输出: true
 * // Related Topics 栈 字符串
 * // 👍 1937 👎 0
 *
 * @author zhouruifeng
 * @date 2020-10-24 19:16:56
 */
public class ValidParentheses {
    public static void main(String[] args) {
        Solution solution = new ValidParentheses().new Solution();
        System.out.println(solution.isValid("()"));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public boolean isValid(String s) {
            Stack<Character> stack = new Stack();
            List<Character> left = new ArrayList<>();
            left.add('(');
            left.add('{');
            left.add('[');
            List<Character> right = new ArrayList<>();
            right.add(')');
            right.add('}');
            right.add(']');
            for (char c : s.toCharArray()) {
                if (left.contains(c)) {
                    stack.push(c);
                } else {
                    if (stack.isEmpty()) {
                        return false;
                    }
                    char cr = stack.pop();
                    if (right.get(left.indexOf(cr)) != c) {
                        return false;
                    }
                }
            }
            return stack.isEmpty();
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}